package com.kimehwa.studyboot.zuoalgs;

import java.util.Stack;

/**
 * @author xiaodongguan
 * @description 实现一个特殊的栈，在实现栈的基本功能的基础上，返回栈中最小元素的操作
 *
 * 写泛型还是不会写 ，今天把这个接口写好，今天晚上
 * @since 2021-07-29 14:03
 */
public class GetMinStack{
    Stack<Integer> stackData = new Stack<>();
    Stack<Integer> stackMin = new Stack<>();
    Stack<int[]> stack = new Stack<>(); // 这个是可以的。

    public void push(Integer t){
        if(stackMin.isEmpty()){
            stackMin.push(t);
        }else if(getMin()>=t){
            stackMin.push(t);
        }
        stackData.push(t);
    }

    public int pop(){
        if(stackData.isEmpty()){
            throw new RuntimeException("no data");
        }
        int val = stackData.pop();
        if(val == getMin()){
            stackMin.pop();
        }
        return val;
    }

    public Integer getMin(){
        if(this.stackMin.isEmpty()){
            throw new RuntimeException("your stack is empty");
        }
        return this.stackMin.peek();
    }
}
